﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
''' <summary>
''' Einfache Taskleiste ohne Verschatelungen
''' </summary>
''' <remarks></remarks>
Public Class ObjektTaskleiste
    Public Rechteck As Rectangle
    Private Buttons() As ObjektButton
    Dim Funktionen() As String = {}
    Dim Tags() As String = {}
    Dim AnzahlderFunktionenproButton() As Integer = {}
    Dim GrößenderTextfelder() As Rectangle
    Dim Text As ObjektText
    Dim CursorRechteck As Rectangle = Nothing
    Dim StartderFunktionen As Integer = 0
    Enum Modi
        Keiner
        Ausgefahren
    End Enum
    Public Modus As Modi = Modi.Keiner
    Dim AusgefahrenesMenü As Integer = -1
    Public Sub New(ByVal neuButtons() As ObjektButton, ByVal neuFunktionen() As String, ByVal neuAnzahlderFunktionproButton() As Integer)
        Buttons = neuButtons
        Tags = neuFunktionen
        Array.Resize(Funktionen, Tags.Length)
        For I = 0 To Funktionen.Length - 1
            Funktionen(I) = Sprachconverter.Translate(Tags(I))
        Next
        AnzahlderFunktionenproButton = neuAnzahlderFunktionproButton
        Rechteck = New Rectangle(0, 0, Hauptmenü.Rechteck.Width, 34)
        Hauptmenü.Rechteck.Y += 34
        Hauptmenü.Rechteck.Height -= 34
        Dim P As New Point(5, 6)
        'Wir ordnen die Buttons
        For I = 0 To Buttons.Length - 1
            Buttons(I).Koordinaten = P
            P.X += 110
        Next
        Dim Farben() As Color = {Color.Gray}
        Text = New ObjektText(Nothing, 0, 0, Farben, "Arial", 11, FontStyle.Regular, , 4)
        'Wir laden die Größen der einzelnen Textfelder
        Array.Resize(GrößenderTextfelder, Buttons.Length)
        Dim Start As Integer = 0
        For I = 0 To Buttons.Length - 1
            Dim Ende As Integer = Start + AnzahlderFunktionenproButton(I) - 1
            For I2 = Start To Ende
                Dim neuRechteck As Rectangle = Text.GetSchriftart.MeasureString(Schriftengine.Sprite2, Funktionen(I2), DrawTextFormat.None, Color.Gray)
                If neuRechteck.Width > GrößenderTextfelder(I).Width Then
                    GrößenderTextfelder(I) = neuRechteck
                End If
            Next
            Start += AnzahlderFunktionenproButton(I)
        Next

    End Sub
    Public Sub Malen()
        'Welchen Teil des Bildes wir malen wollen
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        'prüfen ob wir aus den Screenbereich laufen

        'Festlegen welchen Bereich vom Bitmap wir kopieren

        'Welcher Teil der Textur soll gemalt werden Nichts bedeutet gesamtes Bild

        With Grafikengine.recBild
            .X = 0 : .Width = 600
            .Y = 0 : .Height = 34
        End With

        'Falls der Zoomfaktor größer 1 ist müssen einige Ränder abgeschnitten werden
        'Achtung Rotationszentrum ist auch Ausgangspunkt der bemalung
        With Grafikengine.ptfRotCenter
            .X = 0
            .Y = 0
        End With

        Grafikengine.ptfPosition = New Drawing.Point(0, 0)

        'Ausschnitte in den Backbuffer zeichnen
        'Wo wird das Bild gezeichnet
        '16 ist die Breite eines Feldes 8 die Hälfte das heißt wir ermitteln den Mittelpunkt des Feldes und ziehen die Hälfte der Größe der Einheit ab
        '... und wie breit ist es
        With Grafikengine.szfScale
            .Height = Rechteck.Height
            .Width = Rechteck.Width
        End With

        'jetzt wird es in den Backbuffer gezeichnet
        Grafikengine.Sprite.Draw2D(TexturenHalter.GetTaskbarTexturen(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        For Each Button In Buttons
            Button.Malen()
        Next
        If Modus = Modi.Ausgefahren Then
            With Grafikengine.recBild
                .X = 0 : .Width = 110
                .Y = 0 : .Height = 20
            End With
            Grafikengine.ptfPosition = New Drawing.Point(Buttons(AusgefahrenesMenü).Koordinaten.X, 34)
            If GrößenderTextfelder(AusgefahrenesMenü).Width > 108 Then
                With Grafikengine.szfScale
                    .Height = 20
                    .Width = GrößenderTextfelder(AusgefahrenesMenü).Width + 2
                End With
            Else
                With Grafikengine.szfScale
                    .Height = 20
                    .Width = 110
                End With
            End If
            For I = StartderFunktionen To StartderFunktionen + AnzahlderFunktionenproButton(AusgefahrenesMenü) - 1
                Grafikengine.Sprite.Draw2D(TexturenHalter.GetTaskbarTexturen(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                If I = StartderFunktionen + AnzahlderFunktionenproButton(AusgefahrenesMenü) - 1 Then
                    Dim T() As String = {}
                    For I2 = StartderFunktionen To StartderFunktionen + AnzahlderFunktionenproButton(AusgefahrenesMenü) - 1
                        Array.Resize(T, T.Length + 1)
                        T(T.Length - 1) = Funktionen(I2)
                    Next
                    Dim Farben() As Color = {Color.Gray}
                    Text.neuerText(T, Grafikengine.ptfPosition.X + 1, Grafikengine.ptfPosition.Y + 2 - 20 * (AnzahlderFunktionenproButton(AusgefahrenesMenü) - 1), Farben, , 4)
                    Grafikengine.Sprite.End()
                    Schriftengine.Sprite2.Begin(SpriteFlags.AlphaBlend)
                    Text.Malen(Schriftengine.Sprite2)
                    Schriftengine.Sprite2.Flush()
                    Schriftengine.Sprite2.End()
                    Grafikengine.Sprite.Begin(SpriteFlags.AlphaBlend)
                End If

                Grafikengine.ptfPosition.Y += 20
            Next
            If Not CursorRechteck = Nothing Then
                'Jetzt wird der Cursor gemalt
                With Grafikengine.recBild
                    .X = 0 : .Width = 112
                    .Y = 0 : .Height = 22
                End With
                Grafikengine.ptfPosition = New Drawing.Point(Buttons(AusgefahrenesMenü).Koordinaten.X, 34)
                If GrößenderTextfelder(AusgefahrenesMenü).Width > 108 Then
                    With Grafikengine.szfScale
                        .Height = 22
                        .Width = GrößenderTextfelder(AusgefahrenesMenü).Width + 4
                    End With
                Else
                    With Grafikengine.szfScale
                        .Height = 22
                        .Width = 112
                    End With
                End If
                Grafikengine.ptfPosition = New Drawing.Point(CursorRechteck.X, CursorRechteck.Y)
                Grafikengine.Sprite.Draw2D(TexturenHalter.GetTaskbarTexturen(2), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            End If
        End If

    End Sub
    Public Sub MouseMove(ByVal X As Integer, ByVal Y As Integer)
        For I = 0 To Buttons.Length - 1
            Buttons(I).MouseEnter(X, Y)
        Next
        If Modus = Modi.Ausgefahren Then
            CursorRechteck = CheckKoordinateninAuswahlmenüS(X, Y)
        End If
    End Sub
    Public Sub MouseDown(ByVal X As Integer, ByVal Y As Integer)
        For I = 0 To Buttons.Length - 1
            Buttons(I).MouseDown(X, Y)
        Next
    End Sub
    Public Function MouseUP(ByVal X As Integer, ByVal Y As Integer) As String
        Dim Funktion As String = ""
        For I = 0 To Buttons.Length - 1
            Funktion = Buttons(I).MouseUp(X, Y)
            If Not Funktion = "" Then
                Funktion = "Geklickt"
                AusgefahrenesMenü = I
                Modus = Modi.Ausgefahren
                CursorRechteck = GrößenderTextfelder(I)
                StartderFunktionen = 0
                For I2 = 0 To I - 1
                    StartderFunktionen += AnzahlderFunktionenproButton(I2)
                Next
                Exit For
            End If
        Next
        If Funktion = "" And Modus = Modi.Ausgefahren Then
            Dim I As Integer = CheckKoordinateninAuswahlmenü(X, Y)
            If I >= 0 Then
                Funktion = Tags(I)
                Modus = Modi.Keiner
            End If
        End If
        If Funktion = "" Then
            Modus = Modi.Keiner
        End If
        Return Funktion
    End Function
    Private Function CheckKoordinateninAuswahlmenü(ByVal X As Integer, ByVal Y As Integer) As Integer
        Dim Startrechteck As Rectangle = GrößenderTextfelder(AusgefahrenesMenü)
        Startrechteck.Height = 20
        Startrechteck.Width += 2
        Startrechteck.X = Buttons(AusgefahrenesMenü).Koordinaten.X
        Startrechteck.Y = Rechteck.Height
        For I = StartderFunktionen To StartderFunktionen + AnzahlderFunktionenproButton(AusgefahrenesMenü) - 1
            If Startrechteck.Contains(X, Y) Then
                Return I
            End If
            Startrechteck.Y += 20
        Next
        Return -1
    End Function
    Private Function CheckKoordinateninAuswahlmenüS(ByVal X As Integer, ByVal Y As Integer) As Rectangle
        Dim Startrechteck As Rectangle = GrößenderTextfelder(AusgefahrenesMenü)
        Startrechteck.Height = 22
        Startrechteck.Width += 2
        Startrechteck.X = Buttons(AusgefahrenesMenü).Koordinaten.X - 1
        Startrechteck.Y = Rechteck.Height - 1
        For I = StartderFunktionen To StartderFunktionen + AnzahlderFunktionenproButton(AusgefahrenesMenü) - 1
            If Startrechteck.Contains(X, Y) Then
                Return Startrechteck
            End If
            Startrechteck.Y += 20
        Next
        Return Nothing
    End Function
    Public Sub ChangeWindowSize(ByVal PosChange As Point)
        Rechteck = New Rectangle(0, 0, Hauptmenü.MainMenü.MalPanel.Width, 34)
        Hauptmenü.Rechteck.Height -= 34
        Hauptmenü.Rechteck.Y += 34
    End Sub
End Class
